package cn.xzqwjw.taskmanager.domain.pojo;

import cn.xzqwjw.taskmanager.common.validator.ValidGroupUpdate;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;

/**
 * 任务表
 *
 * @author wjw
 */
@TableName(value = "t_task")
@EqualsAndHashCode(callSuper = true)
@Data
public class Task extends Model<Task> implements Serializable {

  @TableField(exist = false)
  private static final long serialVersionUID = 1L;

  @Override
  public Serializable pkVal() {
    return this.id;
  }

  /**
   * 自动编号
   */
  @TableId(type = IdType.AUTO)
  @NotNull(message = "id不能为空", groups = ValidGroupUpdate.class)
  private Integer id;

  /**
   * 父任务id
   */
  private Integer idParent;

  /**
   * 任务深度
   */
  private Integer depth;

  /**
   * 任务所属分类id
   */
  private Integer idCategory;

  /**
   * 级别：国家级、省级、市级、区级、本部门
   */
  private String level;

  /**
   * 任务所属分类
   */
  private Integer idArticle;

  /**
   * 任务开始时间
   */
  private LocalDateTime dtStart;

  /**
   * 任务结束时间
   */
  private LocalDateTime dtEnd;

  /**
   * 任务目标
   */
  private String IntroGoal;

  /**
   * 任务完成情况
   */
  private String IntroFinished;

  /**
   * 备注
   */
  private String remark;

  /**
   * 任务状态
   */
  private String status;

  /**
   * 启用标志
   */
  private Boolean flagEnabled;

  /**
   * 完成标志
   */
  private Boolean flagFinished;

  /**
   * 任务添加经办人id
   */
  private Integer idOperator;

  /**
   * 审核人id
   */
  private Integer idChecker;

  /**
   * 任务创建时间
   */
  private LocalDateTime dtCreate;

  /**
   * 排序值
   */
  private Integer weight;

  /**
   * 任务对应的文字说明
   */
  @TableField(exist = false)
  @NotNull(message = "任务对应的文字说明不能为空")
  private Article article;

  /**
   * 任务类别名称
   */
  @TableField(exist = false)
  private String categoryName;

  /**
   * 责任科室名称
   */
  @TableField(exist = false)
  private String departmentName;

  /**
   * 任务对应的责任领导真实姓名
   */
  @TableField(exist = false)
  private String leaderName;

  /**
   * 任务对应的责任工作人员真实姓名
   */
  @TableField(exist = false)
  private String staffName;

  /**
   * 任务对应的发布管理员真实姓名
   */
  @TableField(exist = false)
  private String operatorName;

  /**
   * 子任务
   */
  @TableField(exist = false)
  private List<Task> childTaskList;

}